Преобразование URL-адресов в гиперссылки HTML без использования уже отформатированных гиперссылок - PullRequest
1 голос
/ 08 июля 2011

Итак, у меня есть этот код:

$sURLRegExp = '/http\:\/\/([a-z0-9\-\.]+\.[a-z]{2,3}(\/\S*)?)/i';
$iURLMatches = preg_match($sURLRegExp, $sMessage, $aURLMatches);
if ($iURLMatches > 0) {
    $sURL = $aURLMatches[1];
    $sURL = str_replace('www.', '', $sURL);
    $sMessage = preg_replace($sURLRegExp, '<a href="http://$1" target="_blank">' . 
        $sURL . '</a>', $sMessage);
}

Он отлично работает для преобразования всех входящих сообщений, так что введенные простые URL-адреса превратятся в гиперссылки HTML, которые даже удаляют "http://" и" www."для краткости.

Дело в том, что администраторы сайта, на котором это работает, могут войти в HTML. Если они это сделают, он превращается в ужасный беспорядок. Что-то вроде site.com"> text .

Я попытался изменить регулярное выражение, чтобы убедиться, что после данного URL-адреса нет кавычек (что, скорее всего, означает, что он является частьютег привязки гиперссылки) примерно так:

$sURLRegExp = '/http\:\/\/([a-z0-9\-\.]+\.[a-z]{2,3}(\/\S*)?([^"])/i';

... но, похоже, это не работает.Я знаю об упреждающих утверждениях, но не знаю, как их вообще использовать.Будет ли это лучше всего использовать в этом случае?Как я могу обнаружить присутствие тега привязки вокруг этого URL?

Примечание. Я знаю, что могу просто использовать strpos (...)! == false для всегосообщение, но это не учитывает смешения простых URL и тегов привязки в одном сообщении.

1 Ответ

1 голос
/ 08 июля 2011

Хм, оказывается, я недостаточно тщательно искал переполнение стека. Все, что мне нужно было сделать, это добавить (?<![">]) в начало моего регулярного выражения, вот так:

$sURLRegExp = '/(?<![">])http\:\/\/([a-z0-9\-\.]+\.[a-z]{2,3}(\/\S*)?)([^"])/i';

... и работает отлично. Я сохраняю это для использования в будущем для всех, кто попадает на этот пост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...